﻿2026-05-13T12:39:06.7360807Z ##[group]Run pnpm verify:phase-4
2026-05-13T12:39:06.7361137Z [36;1mpnpm verify:phase-4[0m
2026-05-13T12:39:06.7383536Z shell: /usr/bin/bash -e {0}
2026-05-13T12:39:06.7383783Z env:
2026-05-13T12:39:06.7384237Z   PNPM_HOME: /home/runner/setup-pnpm/node_modules/.bin
2026-05-13T12:39:06.7384566Z   SKIP_PHASE_3_CARRYOVER: 1
2026-05-13T12:39:06.7384801Z   SKIP_TRACE_CHECK: 1
2026-05-13T12:39:06.7385018Z ##[endgroup]
2026-05-13T12:39:07.0658240Z 
2026-05-13T12:39:07.0659403Z > rebno@0.0.0 verify:phase-4 /home/runner/work/rebno/rebno
2026-05-13T12:39:07.0660581Z > node scripts/verify-phase-4.mjs
2026-05-13T12:39:07.0661178Z 
2026-05-13T12:39:07.1016953Z 
2026-05-13T12:39:07.1017884Z === Workspace: typecheck ===
2026-05-13T12:39:07.1018713Z >>> pnpm -r typecheck
2026-05-13T12:39:07.4266409Z Scope: 5 of 6 workspace projects
2026-05-13T12:39:07.4320054Z packages/db typecheck$ tsc --noEmit
2026-05-13T12:39:07.4328599Z packages/game-logic typecheck$ tsc --noEmit
2026-05-13T12:39:10.0005398Z packages/game-logic typecheck: Done
2026-05-13T12:39:10.0006594Z packages/protocol typecheck$ tsc --noEmit
2026-05-13T12:39:12.1355824Z packages/db typecheck: Done
2026-05-13T12:39:13.3777845Z packages/protocol typecheck: Done
2026-05-13T12:39:13.3784949Z apps/server typecheck$ tsc --noEmit
2026-05-13T12:39:13.3788185Z apps/client typecheck$ tsc --noEmit
2026-05-13T12:39:24.4876807Z apps/client typecheck: Done
2026-05-13T12:39:25.6276618Z apps/server typecheck: Done
2026-05-13T12:39:25.6376882Z 
2026-05-13T12:39:25.6377669Z === Lint: protocol-sync ===
2026-05-13T12:39:25.6378466Z >>> pnpm lint:protocol-sync
2026-05-13T12:39:25.9281721Z 
2026-05-13T12:39:25.9282910Z > rebno@0.0.0 lint:protocol-sync /home/runner/work/rebno/rebno
2026-05-13T12:39:25.9284434Z > node tools/scripts/lint-protocol-sync.mjs
2026-05-13T12:39:25.9285087Z 
2026-05-13T12:39:25.9613700Z lint-protocol-sync: OK
2026-05-13T12:39:25.9754729Z 
2026-05-13T12:39:25.9755823Z === Lint: game-logic-purity ===
2026-05-13T12:39:25.9756575Z >>> pnpm lint:game-logic-purity
2026-05-13T12:39:26.2738547Z 
2026-05-13T12:39:26.2739713Z > rebno@0.0.0 lint:game-logic-purity /home/runner/work/rebno/rebno
2026-05-13T12:39:26.2740845Z > node tools/scripts/lint-game-logic-purity.mjs
2026-05-13T12:39:26.2741480Z 
2026-05-13T12:39:26.3083707Z lint-game-logic-purity: OK (7 file(s) clean)
2026-05-13T12:39:26.3211728Z 
2026-05-13T12:39:26.3212686Z === Lint: better-auth-schema-sync ===
2026-05-13T12:39:26.3213604Z >>> pnpm lint:better-auth-schema-sync
2026-05-13T12:39:26.6204639Z 
2026-05-13T12:39:26.6205890Z > rebno@0.0.0 lint:better-auth-schema-sync /home/runner/work/rebno/rebno
2026-05-13T12:39:26.6206813Z > node tools/scripts/lint-better-auth-schema-sync.mjs
2026-05-13T12:39:26.6207374Z 
2026-05-13T12:39:28.2593283Z lint-better-auth-schema-sync: OK
2026-05-13T12:39:28.2728775Z 
2026-05-13T12:39:28.2730621Z === Lint: rate-limit-budgets ===
2026-05-13T12:39:28.2731244Z >>> pnpm lint:rate-limit-budgets
2026-05-13T12:39:28.5666077Z 
2026-05-13T12:39:28.5667116Z > rebno@0.0.0 lint:rate-limit-budgets /home/runner/work/rebno/rebno
2026-05-13T12:39:28.5673432Z > node tools/scripts/lint-rate-limit-budgets.mjs
2026-05-13T12:39:28.5674302Z 
2026-05-13T12:39:28.5973158Z lint-rate-limit-budgets: OK (5 D-22 budgets locked)
2026-05-13T12:39:28.6103252Z 
2026-05-13T12:39:28.6104599Z === Lint: no-clipboard-rce ===
2026-05-13T12:39:28.6105955Z >>> pnpm lint:no-clipboard-rce
2026-05-13T12:39:28.9057578Z 
2026-05-13T12:39:28.9060260Z > rebno@0.0.0 lint:no-clipboard-rce /home/runner/work/rebno/rebno
2026-05-13T12:39:28.9064911Z > node tools/scripts/lint-no-clipboard-rce.mjs
2026-05-13T12:39:28.9065468Z 
2026-05-13T12:39:28.9402222Z lint-no-clipboard-rce: OK (21 file(s) clean)
2026-05-13T12:39:28.9535665Z 
2026-05-13T12:39:28.9536629Z === Lint: room-layout ===
2026-05-13T12:39:28.9538187Z >>> pnpm lint:room-layout
2026-05-13T12:39:29.2512441Z 
2026-05-13T12:39:29.2565132Z > rebno@0.0.0 lint:room-layout /home/runner/work/rebno/rebno
2026-05-13T12:39:29.2579595Z > node tools/scripts/lint-room-layout.mjs
2026-05-13T12:39:29.2584607Z 
2026-05-13T12:39:29.2926671Z lint-room-layout: OK
2026-05-13T12:39:29.3056194Z 
2026-05-13T12:39:29.3056987Z === ADR 0004 lint ===
2026-05-13T12:39:29.3058043Z >>> pnpm lint:adr:0004
2026-05-13T12:39:29.6012452Z 
2026-05-13T12:39:29.6013484Z > rebno@0.0.0 lint:adr:0004 /home/runner/work/rebno/rebno
2026-05-13T12:39:29.6015408Z > node tools/asset-catalog/scripts/lint-adr.mjs docs/adr/0004-room-hot-reload.md --no-matrix
2026-05-13T12:39:29.6017906Z 
2026-05-13T12:39:29.6336417Z OK: ADR docs/adr/0004-room-hot-reload.md validated (no-matrix mode — Michael Nygard sections present)
2026-05-13T12:39:29.6468128Z 
2026-05-13T12:39:29.6469017Z === Drizzle: emit-check ===
2026-05-13T12:39:29.6471336Z >>> pnpm db:emit-check
2026-05-13T12:39:29.9670896Z 
2026-05-13T12:39:29.9672038Z > rebno@0.0.0 db:emit-check /home/runner/work/rebno/rebno
2026-05-13T12:39:29.9675214Z > pnpm -C packages/db exec drizzle-kit generate && node -e "require('fs').copyFileSync('packages/db/migrations/0001_baseline.sql','docs/extracted-server/0001_baseline.sql')" && git diff --exit-code packages/db/migrations/0001_baseline.sql docs/extracted-server/0001_baseline.sql
2026-05-13T12:39:29.9677323Z 
2026-05-13T12:39:30.4079890Z No config path provided, using default 'drizzle.config.ts'
2026-05-13T12:39:30.4081454Z Reading config file '/home/runner/work/rebno/rebno/packages/db/drizzle.config.ts'
2026-05-13T12:39:30.8478634Z 8 tables
2026-05-13T12:39:30.8482079Z accounts 8 columns 1 indexes 0 fks
2026-05-13T12:39:30.8484671Z audit_log 6 columns 0 indexes 2 fks
2026-05-13T12:39:30.8485215Z characters 9 columns 0 indexes 1 fks
2026-05-13T12:39:30.8485755Z inventory_items 4 columns 0 indexes 1 fks
2026-05-13T12:39:30.8486375Z legacy_credentials_staging 6 columns 0 indexes 0 fks
2026-05-13T12:39:30.8486987Z message_board_replies 5 columns 0 indexes 2 fks
2026-05-13T12:39:30.8487613Z message_board_topics 7 columns 0 indexes 1 fks
2026-05-13T12:39:30.8488144Z sessions 5 columns 0 indexes 1 fks
2026-05-13T12:39:30.8488426Z 
2026-05-13T12:39:30.8489001Z No schema changes, nothing to migrate 😴
2026-05-13T12:39:31.5830124Z 
2026-05-13T12:39:31.5830916Z === Drizzle: schema-sync ===
2026-05-13T12:39:31.5833167Z >>> pnpm lint:schema-sync
2026-05-13T12:39:31.8763241Z 
2026-05-13T12:39:31.8764385Z > rebno@0.0.0 lint:schema-sync /home/runner/work/rebno/rebno
2026-05-13T12:39:31.8767524Z > node -e "const a=require('fs').readFileSync('packages/db/migrations/0001_baseline.sql');const b=require('fs').readFileSync('docs/extracted-server/0001_baseline.sql');if(Buffer.compare(a,b)!==0){console.error('docs/extracted-server/0001_baseline.sql out of sync with packages/db/migrations/0001_baseline.sql');process.exit(1)}console.log('OK')"
2026-05-13T12:39:31.8769797Z 
2026-05-13T12:39:31.9046338Z OK
2026-05-13T12:39:31.9196176Z 
2026-05-13T12:39:31.9197137Z === Drizzle: source-comments ===
2026-05-13T12:39:31.9197840Z >>> pnpm lint:source-comments
2026-05-13T12:39:32.2454763Z 
2026-05-13T12:39:32.2455903Z > rebno@0.0.0 lint:source-comments /home/runner/work/rebno/rebno
2026-05-13T12:39:32.2456948Z > pnpm -C packages/db run lint:source-comments
2026-05-13T12:39:32.2457507Z 
2026-05-13T12:39:32.5415886Z 
2026-05-13T12:39:32.5417153Z > @rebno/db@0.1.0 lint:source-comments /home/runner/work/rebno/rebno/packages/db
2026-05-13T12:39:32.5418311Z > node scripts/check-source-comments.mjs
2026-05-13T12:39:32.5418895Z 
2026-05-13T12:39:32.5736872Z check-source-comments: OK (50 columns, all SOURCE-cited)
2026-05-13T12:39:32.5971194Z 
2026-05-13T12:39:32.5972017Z === Workspace: test ===
2026-05-13T12:39:32.5972698Z >>> pnpm -r test
2026-05-13T12:39:32.8978660Z Scope: 5 of 6 workspace projects
2026-05-13T12:39:32.9045132Z packages/db test$ vitest run
2026-05-13T12:39:32.9045738Z packages/game-logic test$ vitest run
2026-05-13T12:39:33.3998562Z packages/game-logic test: [1m[30m[46m RUN [49m[39m[22m [36mv4.1.5 [39m[90m/home/runner/work/rebno/rebno/packages/game-logic[39m
2026-05-13T12:39:33.4036419Z packages/db test: [1m[30m[46m RUN [49m[39m[22m [36mv4.1.5 [39m[90m/home/runner/work/rebno/rebno/packages/db[39m
2026-05-13T12:39:33.7836418Z packages/game-logic test:  [32m✓[39m test/step-bno-fidelity.test.ts [2m([22m[2m13 tests[22m[2m)[22m[32m 19[2mms[22m[39m
2026-05-13T12:39:34.0285460Z packages/game-logic test:  [32m✓[39m test/wall-slide.test.ts [2m([22m[2m1 test[22m[2m)[22m[32m 5[2mms[22m[39m
2026-05-13T12:39:34.2626204Z packages/game-logic test:  [32m✓[39m test/golden.test.ts [2m([22m[2m6 tests[22m[2m)[22m[32m 10[2mms[22m[39m
2026-05-13T12:39:34.4282612Z packages/db test:  [32m✓[39m tests/promotion.test.ts [2m([22m[2m4 tests[22m[2m)[22m[32m 8[2mms[22m[39m
2026-05-13T12:39:34.5024371Z packages/game-logic test:  [32m✓[39m test/walkable-edge.test.ts [2m([22m[2m1 test[22m[2m)[22m[32m 5[2mms[22m[39m
2026-05-13T12:39:34.6600725Z packages/db test:  [32m✓[39m tests/save-format-traceability.test.ts [2m([22m[2m8 tests[22m[2m)[22m[32m 7[2mms[22m[39m
2026-05-13T12:39:34.7216393Z packages/game-logic test:  [32m✓[39m test/movement-constants.test.ts [2m([22m[2m9 tests[22m[2m)[22m[32m 7[2mms[22m[39m
2026-05-13T12:39:34.9656864Z packages/game-logic test:  [32m✓[39m test/platform-cycle.test.ts [2m([22m[2m4 tests[22m[2m)[22m[32m 17[2mms[22m[39m
2026-05-13T12:39:35.1748266Z packages/game-logic test:  [32m✓[39m test/navi-mask-bbox.test.ts [2m([22m[2m2 tests[22m[2m)[22m[32m 5[2mms[22m[39m
2026-05-13T12:39:35.3942497Z packages/game-logic test:  [32m✓[39m test/accumulator.test.ts [2m([22m[2m7 tests[22m[2m)[22m[32m 7[2mms[22m[39m
2026-05-13T12:39:35.4403862Z packages/db test:  [32m✓[39m tests/schema-shape.test.ts [2m([22m[2m10 tests[22m[2m)[22m[32m 12[2mms[22m[39m
2026-05-13T12:39:35.4486040Z packages/db test: [2m Test Files [22m [1m[32m3 passed[39m[22m[90m (3)[39m
2026-05-13T12:39:35.4575549Z packages/db test: [2m      Tests [22m [1m[32m22 passed[39m[22m[90m (22)[39m
2026-05-13T12:39:35.4595132Z packages/db test: [2m   Start at [22m 12:39:33
2026-05-13T12:39:35.4604814Z packages/db test: [2m   Duration [22m 2.04s[2m (transform 231ms, setup 0ms, import 1.42s, tests 27ms, environment 0ms)[22m
2026-05-13T12:39:35.4902910Z packages/db test: Done
2026-05-13T12:39:35.4915951Z packages/protocol test$ vitest run
2026-05-13T12:39:35.6033766Z packages/game-logic test:  [32m✓[39m test/run-speed.test.ts [2m([22m[2m3 tests[22m[2m)[22m[32m 6[2mms[22m[39m
2026-05-13T12:39:35.8326523Z packages/game-logic test:  [32m✓[39m test/rng.test.ts [2m([22m[2m4 tests[22m[2m)[22m[32m 8[2mms[22m[39m
2026-05-13T12:39:35.8406208Z packages/game-logic test: [2m Test Files [22m [1m[32m10 passed[39m[22m[90m (10)[39m
2026-05-13T12:39:35.8422857Z packages/game-logic test: [2m      Tests [22m [1m[32m50 passed[39m[22m[90m (50)[39m
2026-05-13T12:39:35.8428927Z packages/game-logic test: [2m   Start at [22m 12:39:33
2026-05-13T12:39:35.8446597Z packages/game-logic test: [2m   Duration [22m 2.42s[2m (transform 184ms, setup 0ms, import 373ms, tests 89ms, environment 4ms)[22m
2026-05-13T12:39:35.8972005Z packages/game-logic test: Done
2026-05-13T12:39:35.9762250Z packages/protocol test: [1m[30m[46m RUN [49m[39m[22m [36mv4.1.5 [39m[90m/home/runner/work/rebno/rebno/packages/protocol[39m
2026-05-13T12:39:36.2636506Z packages/protocol test:  [32m✓[39m test/codec.test.ts [2m([22m[2m18 tests[22m[2m)[22m[32m 15[2mms[22m[39m
2026-05-13T12:39:36.4246133Z packages/protocol test:  [32m✓[39m test/intents.test.ts [2m([22m[2m6 tests[22m[2m)[22m[32m 6[2mms[22m[39m
2026-05-13T12:39:36.5936969Z packages/protocol test:  [32m✓[39m test/schema-shape.test.ts [2m([22m[2m3 tests[22m[2m)[22m[32m 5[2mms[22m[39m
2026-05-13T12:39:36.7561945Z packages/protocol test:  [31m❯[39m test/state.test.ts [2m([22m[2m3 tests[22m[2m | [22m[31m1 failed[39m[2m)[22m[32m 9[2mms[22m[39m
2026-05-13T12:39:36.7571516Z packages/protocol test: [31m     [31m×[31m PROTOCOL_VERSION === 2[39m[32m 7[2mms[22m[39m
2026-05-13T12:39:36.7573417Z packages/protocol test:      [32m✓[39m PlayerState defaults — axis_x_held and axis_y_held start at 0[32m 1[2mms[22m[39m
2026-05-13T12:39:36.7576158Z packages/protocol test:      [32m✓[39m PlayerState accepts -1 / 0 / 1 axis values[32m 0[2mms[22m[39m
2026-05-13T12:39:36.7588347Z packages/protocol test: [31m⎯⎯⎯⎯⎯⎯⎯[39m[1m[41m Failed Tests 1 [49m[22m[31m⎯⎯⎯⎯⎯⎯⎯[39m
2026-05-13T12:39:36.7594351Z packages/protocol test: [41m[1m FAIL [22m[49m test/state.test.ts[2m > [22mPhase 6 D-08 — PROTOCOL_VERSION bump (1 → 2)[2m > [22mPROTOCOL_VERSION === 2
2026-05-13T12:39:36.7606375Z packages/protocol test: [31m[1mAssertionError[22m: expected 3 to be 2 // Object.is equality[39m
2026-05-13T12:39:36.7607584Z packages/protocol test: [32m- Expected[39m
2026-05-13T12:39:36.7608450Z packages/protocol test: [31m+ Received[39m
2026-05-13T12:39:36.7609222Z packages/protocol test: [32m- 2[39m
2026-05-13T12:39:36.7609972Z packages/protocol test: [31m+ 3[39m
2026-05-13T12:39:36.7611017Z packages/protocol test: [36m [2m❯[22m test/state.test.ts:[2m12:30[22m[39m
2026-05-13T12:39:36.7635138Z packages/protocol test:     [90m 10|[39m [34mdescribe[39m([32m'Phase 6 D-08 — PROTOCOL_VERSION bump (1 → 2)'[39m[33m,[39m () [33m=>[39m {
2026-05-13T12:39:36.7651981Z packages/protocol test:     [90m 11|[39m   [34mit[39m([32m'PROTOCOL_VERSION === 2'[39m[33m,[39m () [33m=>[39m {
2026-05-13T12:39:36.7654239Z packages/protocol test:     [90m 12|[39m     [34mexpect[39m([33mPROTOCOL_VERSION[39m)[33m.[39m[34mtoBe[39m([34m2[39m)[33m;[39m
2026-05-13T12:39:36.7655910Z packages/protocol test:     [90m   |[39m                              [31m^[39m
2026-05-13T12:39:36.7657028Z packages/protocol test:     [90m 13|[39m   })[33m;[39m
2026-05-13T12:39:36.7658073Z packages/protocol test:     [90m 14|[39m })[33m;[39m
2026-05-13T12:39:36.7659198Z packages/protocol test: [31m[2m⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[1/1]⎯[22m[39m
2026-05-13T12:39:36.7660667Z packages/protocol test: [2m Test Files [22m [1m[31m1 failed[39m[22m[2m | [22m[1m[32m3 passed[39m[22m[90m (4)[39m
2026-05-13T12:39:36.7662545Z packages/protocol test: [2m      Tests [22m [1m[31m1 failed[39m[22m[2m | [22m[1m[32m29 passed[39m[22m[90m (30)[39m
2026-05-13T12:39:36.7664185Z packages/protocol test: [2m   Start at [22m 12:39:35
2026-05-13T12:39:36.7666021Z packages/protocol test: [2m   Duration [22m 776ms[2m (transform 113ms, setup 0ms, import 220ms, tests 35ms, environment 0ms)[22m
2026-05-13T12:39:36.7673410Z packages/protocol test: ::error file=/home/runner/work/rebno/rebno/packages/protocol/test/state.test.ts,title=test/state.test.ts > Phase 6 D-08 — PROTOCOL_VERSION bump (1 → 2) > PROTOCOL_VERSION === 2,line=12,column=30::AssertionError: expected 3 to be 2 // Object.is equality%0A%0A- Expected%0A+ Received%0A%0A- 2%0A+ 3%0A%0A ❯ test/state.test.ts:12:30%0A%0A
2026-05-13T12:39:36.7881278Z packages/protocol test: Failed
2026-05-13T12:39:36.8016006Z /home/runner/work/rebno/rebno/packages/protocol:
2026-05-13T12:39:36.8017777Z  ERR_PNPM_RECURSIVE_RUN_FIRST_FAIL  @rebno/protocol@0.1.0 test: `vitest run`
2026-05-13T12:39:36.8018465Z Exit status 1
2026-05-13T12:39:36.8222559Z 
2026-05-13T12:39:36.8224225Z verify-phase-4 FAILED at step 'Workspace: test': pnpm -r test (exit 1)
2026-05-13T12:39:36.8225100Z Fix the failing step and re-run `pnpm verify:phase-4`.
2026-05-13T12:39:36.8403446Z  ELIFECYCLE  Command failed with exit code 1.
2026-05-13T12:39:36.8615009Z ##[error]Process completed with exit code 1.
